"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 4、参数化.py
"""

"""
参数化：将模型中的定量信息变量化，使之成为任意调整的参数   
        使用装饰器 : @pytest.mark.parametrize
    单参数
    多参数
    用例重命名
    笛卡尔积
"""
import pytest

# 验证搜索功能
search_list = ['appium', 'selenium', 'pytest']


# 单参数
@pytest.mark.parametrize('name', search_list)
def test_search(name):
    assert name in search_list


# 多参数
# 1、参数化的名字，要与方法的参数名，完全对应
# 2、如果传递多个参数的话，要放在列表中。列表中嵌套列表/元组
@pytest.mark.parametrize('test_input,expected', [('3+5', 8), ['-1+1', 0], ('-2+-3', -5)])
def test_add_result(test_input, expected):
    # eval将 字符转表达式 转化成 数字表达式
    assert eval(test_input) == expected


# 用例重命名
# ids 的个数 == 传递数据的个数
# 结果返回：4、参数化.py::test_add1_result[number1] PASSED
@pytest.mark.parametrize('test_input,expected', [('3+5', 8), ('-1+1', 0), ('-2+-3', -5)],
                         ids=['number1', 'number2', 'number3'])
def test_add1_result(test_input, expected):
    assert eval(test_input) == expected


# 笛卡尔积   测试用的不多
# a = [1,2,3]
# b = [a,b,c]
"""
有以下组合形式
        （1，a）   (1,b)    (1,c)
        （2，a）   (2,b)    (2,c)
        （3，a）   (3,b)    (3,c)
 """

# 九种组合
"""
结果如下：

4、参数化.py::test_dkej[utf-8-appium] PASSED                             [ 11%]wd:appium,code:utf-8

4、参数化.py::test_dkej[utf-8-selenium] PASSED                           [ 22%]wd:selenium,code:utf-8

4、参数化.py::test_dkej[utf-8-pytest] PASSED                             [ 33%]wd:pytest,code:utf-8

4、参数化.py::test_dkej[gbk-appium] PASSED                               [ 44%]wd:appium,code:gbk

4、参数化.py::test_dkej[gbk-selenium] PASSED                             [ 55%]wd:selenium,code:gbk

4、参数化.py::test_dkej[gbk-pytest] PASSED                               [ 66%]wd:pytest,code:gbk

4、参数化.py::test_dkej[gb2312-appium] PASSED                            [ 77%]wd:appium,code:gb2312

4、参数化.py::test_dkej[gb2312-selenium] PASSED                          [ 88%]wd:selenium,code:gb2312

4、参数化.py::test_dkej[gb2312-pytest] PASSED                            [100%]wd:pytest,code:gb2312

"""


# 笛卡尔积：
@pytest.mark.parametrize('wd', ['appium', 'selenium', 'pytest'])
@pytest.mark.parametrize('code', ['utf-8', 'gbk', 'gb2312'])
def test_dkej(wd, code):
    print(f'wd是:{wd},code是:{code}')
